home *** CD-ROM | disk | FTP | other *** search
/ L' Effet Pommier 3 / L'Effet Pommier - Volume 03.iso / HyperCard-SuperCard / XCMD Docs / CompileIt! Source Code / RectToRGBW(rect,blackColor) < prev    next >
Text File  |  1995-08-20  |  3KB  |  98 lines

  1. global rgb:R[6],red1:L,green1:L,blue1:L
  2.  
  3. -- we must  do this or CompileIt! will used signed numbers (example: Compile would call 65535 negetive one)
  4.  
  5. global blackC:C
  6.  
  7. function RectToRGBW rect,blackColor
  8.   put blackColor into BlackC
  9.   put item 1 of rect*1 into r1
  10.   put item 2 of rect*1 into r2
  11.   put item 3 of rect*1 into r3
  12.   put item 4 of rect*1 into r4
  13.   put ((r3-r1)*(r4-r2))+1 into size1 -- this will calculate the size of the handle needed.
  14.   put NewHandleClear(size1) into hand
  15.   put 1 into byteNum -- we could calculate this in the repeat using arithmatic, but doing so would be SLOW. Counting up is a LOT FASTER!
  16.   repeat with v=r2 to r4
  17.     repeat with h=r1 to r3
  18.       GetCPixel h,v,rgb
  19.       put rgb.integerType[1] into red1.integerType[2] -- this lets us sneek by CompileIt!'s signed numbers.
  20.       put rgb.integerType[2] into green1.integerType[2]
  21.       put rgb.integerType[3] into blue1.integerType[2]
  22.       
  23.       -- **************TAKE CARE OF FAST STUFF FIRST*********************
  24.       
  25.       if red1>green1 and red1>blue1 then
  26.         put "r" into char byteNum of handle hand
  27.         add one to byteNum
  28.         next repeat
  29.       end if
  30.       if green1>red1 and green1>blue1 then
  31.         put "g" into char byteNum of handle hand
  32.         add one to byteNum
  33.         next repeat
  34.       end if
  35.       if blue1>green1 and blue1>red1 then
  36.         put "b" into char byteNum of handle hand
  37.         add one to byteNum
  38.         next repeat
  39.       end if
  40.       if red1=0 and green1=0 and blue1=0 then
  41.         put blackC into char byteNum of handle hand
  42.         add one to byteNum
  43.         next repeat
  44.       end if
  45.       if red1=green1 and red1=blue1 then
  46.         put "w" into char byteNum of handle hand
  47.         add one to byteNum
  48.         next repeat
  49.       end if
  50.       
  51.       if red1=green1 and red1>blue1 then
  52.         put "y" into char byteNum of handle hand
  53.         add one to byteNum
  54.         next repeat
  55.       end if
  56.       
  57.       if red1=blue1 and red1>green1 then
  58.         put char (the random of 2) of "rb" into char byteNum of handle hand
  59.         add one to byteNum
  60.         next repeat
  61.       end if
  62.       
  63.        if green1=blue1 and green1>red1 then
  64.         put char (the random of 2) of "gb" into char byteNum of handle hand
  65.         add one to byteNum
  66.         next repeat
  67.       end if
  68.  
  69.       -- **************END OF FAST STUFF. NOW FOR SLOWER STUFF****************
  70.       
  71.       -- This checks which it is closer too, if the others do not catch it...
  72.       -- This may never be written, because it may not be nessisary!?!?!?!?!? Is It????
  73.       -- If it ever executes, it will beep four times. It will then return 3 numbers. I would like to see these numbers
  74.       
  75.       -- First let's  define a few colors
  76.       --     White=65535,65535,65535
  77.       --     Red=65535,0,0
  78.       --     Green=0,65535,0
  79.       --     Blue=0,0,65535
  80.       
  81.       -- Now, lets find the closest match:
  82.       
  83.       put  65535-red1 into redDiff
  84.       put 65535-green1 into greenDif
  85.       put 65535-blue1 into blueDiff
  86.       
  87.       -- (by now, source size>machine code size, and Compiled HyperTalk>library!)
  88.       
  89.       sysBeep 10
  90.       sysBeep 10
  91.       sysBeep 10
  92.       sysBeep 10
  93.       disposeHandle hand
  94.       return red1 && green1 && blue1
  95.     end repeat
  96.   end repeat
  97.   return HyperCardText(Hand)
  98. end RectToRGBW